<?php
/**
 * 文件直接下载控制器
 * 提供无需令牌验证的文件直接下载功能
 */
namespace app\controller;

use think\facade\Db;
use think\facade\Request;
use think\response\File;
use app\common\FileUploadConfig; // 导入全局文件上传配置类

class FileDownload
{
    /**
     * 直接下载文件
     * @param int $id 文件ID
     * @return File|\think\response\Json
     */
    public function download()
    {
        // 获取文件ID参数
        $id = Request::param('id');
        
        // 获取文件信息
        $file = Db::name('oa_file')->where('id', $id)->find();
        
        if (!$file) {
            return json(['code' => 404, 'msg' => '文件不存在']);
        }
        
        // 使用全局配置获取下载路径
        $filePath = FileUploadConfig::getDownloadPath($file);
        
        // 如果getDownloadPath返回null，表示文件不存在
        if (!$filePath) {
            return json(['code' => 404, 'msg' => '文件不存在于服务器']);
        }
        
        // 确保路径使用正斜杠，避免Windows系统下的反斜杠问题
        $filePath = str_replace('\\', '/', $filePath);
        
        // 返回文件下载响应
        return download($filePath, $file['name']);
    }
}